package gybase02

//interface ActionTemp {
//    void aaa()
//}
//
//def closuretemp = {
//    println "aaa"
//}
//ActionTemp actionTemp = closuretemp
//actionTemp.aaa()// 这里可以运行  这里和 call方法没有关系了
////aaa
//
//println closuretemp.class
//println actionTemp.class // 动态代理
////class gybase02.GyBiBaoTemp$_run_closure1
////class com.sun.proxy.$Proxy18


interface ActionTemp {
    void aaa()

    void bbb(b)

    void ccc(c)
}


//def closuretemp = {
//    println "aaa"
//}
//
//ActionTemp actionTemp = closuretemp as ActionTemp // ActionTemp里有多个方法，需要强转
//actionTemp.aaa()// 这里可以运行  这里和 call方法没有关系了
//actionTemp.bbb()// 这里可以运行  这里和 call方法没有关系了
//aaa

//println closuretemp.class
//println actionTemp.class // 动态代理

//aaa
//aaa
//class gybase02.GyBiBaoTemp$_run_closure1
//class com.sun.proxy.$Proxy18

//换个写法
def addTextWatcher(ActionTemp actionTemp) {
    actionTemp.aaa()//调用的还是闭包代码
    actionTemp.bbb(333)//调用的还是闭包代码
}

addTextWatcher({
    println "调用了 aaa"
} as ActionTemp)//有多个方法需要强转
//调用了 aaa
//调用了 aaa


interface ActionTemp2 {
    void aaa()

}

def addTextWatcher2(ActionTemp2 actionTemp) {
    actionTemp.aaa()//调用的还是闭包代码
}

addTextWatcher2({
    println "ActionTemp2 调用了 aaa"
})
//addTextWatcher3 调用了 aaa

addTextWatcher2 { //直接传入闭包，由于DLS特性 可以这么写
    println "addTextWatcher DLS特性写法 调用了 aaa"
}//一个个方法 这里不需要 强转
//addTextWatcher DLS特性写法 调用了 aaa

//gradle 里 的 ext {} 实际是ext({}), 这个ext方法是gradle提供的扩展方法